package br.fafica.poo2.rightcode.fachada;

import java.sql.SQLException;
import java.util.ArrayList;

import br.fafica.poo2.rightcode.aluno.Aluno;
import br.fafica.poo2.rightcode.aluno.RepositorioAlunoArrayList;
import br.fafica.poo2.rightcode.disciplina.Disciplina;
import br.fafica.poo2.rightcode.disciplina.RepositorioDisciplinaArrayList;
import br.fafica.poo2.rightcode.exception.AlunoNaoEncontradoException;
import br.fafica.poo2.rightcode.exception.CnpjInvalidoException;
import br.fafica.poo2.rightcode.exception.CodigoInvalidoException;
import br.fafica.poo2.rightcode.exception.DisciplinaNaoEncontradaException;
import br.fafica.poo2.rightcode.exception.FiltroNaoEncontradoException;
import br.fafica.poo2.rightcode.exception.InstituicaoNaoEncontradaException;
import br.fafica.poo2.rightcode.exception.ListaDisciplinaVaziaException;
import br.fafica.poo2.rightcode.exception.ListaInstituicaoVaziaException;
import br.fafica.poo2.rightcode.exception.NomeInvalidoException;
import br.fafica.poo2.rightcode.exception.UsuarioNaoEncontradoException;
import br.fafica.poo2.rightcode.exception.listaAlunoVaziaException;
import br.fafica.poo2.rightcode.exception.listaFiltroVaziaException;
import br.fafica.poo2.rightcode.exception.listaUsuarioVaziaException;
import br.fafica.poo2.rightcode.factory.DataSourceType;
import br.fafica.poo2.rightcode.filtro.Filtro;
import br.fafica.poo2.rightcode.filtro.RepositorioFiltroArrayList;
import br.fafica.poo2.rightcode.instituicao.Instituicao;
import br.fafica.poo2.rightcode.usuario.RepositorioUsuarioArrayList;
import br.fafica.poo2.rightcode.usuario.Usuario;

public interface IFachada {
	
	public void selectDataSource(DataSourceType type);
	public void installDataSource(boolean samples) throws SQLException;
	public void TesteAluno() throws SQLException;
	public void InstalarAluno(boolean samples) throws SQLException;
	public void AdicionarAluno(Aluno aluno) throws SQLException, CodigoInvalidoException, NomeInvalidoException;
	public ArrayList<Aluno> ListaAluno() throws listaAlunoVaziaException, SQLException;
	public void RemoverAluno(Aluno aluno) throws SQLException, AlunoNaoEncontradoException, CodigoInvalidoException;
	public Aluno BuscarAluno(int codigo) throws AlunoNaoEncontradoException, SQLException, CodigoInvalidoException;
	public void EditarAluno(Aluno aluno) throws AlunoNaoEncontradoException, SQLException, CodigoInvalidoException;
	public void TesteFiltro() throws SQLException;
	public void InstalarFiltro(boolean samples) throws SQLException;
	public void AdicionarFiltro(Filtro filtro) throws SQLException, CodigoInvalidoException, NomeInvalidoException;
	public ArrayList<Filtro> ListaFiltro() throws SQLException, listaFiltroVaziaException;
	public void RemoverFiltro(Filtro filtro) throws SQLException, FiltroNaoEncontradoException, CodigoInvalidoException;
	public Filtro BuscarFiltro(int codigo) throws SQLException, FiltroNaoEncontradoException, CodigoInvalidoException;
	public void EditarFiltro(Filtro filtro)throws FiltroNaoEncontradoException, SQLException, NomeInvalidoException, CodigoInvalidoException;
	public void TesteUsuario() throws SQLException;
	public void InstalarUsuario(boolean samples) throws SQLException;
	public void AdicionarUsuario(Usuario usuario) throws SQLException, CodigoInvalidoException, NomeInvalidoException;
	public ArrayList<Usuario> ListaUsuario() throws SQLException, listaUsuarioVaziaException;
	public void RemoverUsuario(Usuario usuario) throws SQLException, UsuarioNaoEncontradoException, CodigoInvalidoException;
	public Usuario BuscarUsuario(int codigo) throws SQLException, UsuarioNaoEncontradoException, CodigoInvalidoException;
	public void EditarUsuario(Usuario usuario) throws UsuarioNaoEncontradoException, SQLException, NomeInvalidoException, CodigoInvalidoException;
	public void TesteDisciplina() throws SQLException;
	public void InstalarDisciplina(boolean samples) throws SQLException;
	public void AdicionarDisciplina(Disciplina disciplina) throws SQLException, CodigoInvalidoException, NomeInvalidoException;
	public void RemoverDisciplina(Disciplina disciplina) throws SQLException, DisciplinaNaoEncontradaException, CodigoInvalidoException;
	public Disciplina BuscarDisciplina(int codigo) throws SQLException, DisciplinaNaoEncontradaException, CodigoInvalidoException;
	public ArrayList <Disciplina> ListaDisciplina() throws ListaDisciplinaVaziaException, SQLException;
	public void EditarDisciplinas(Disciplina disciplina)throws DisciplinaNaoEncontradaException, SQLException, NomeInvalidoException, CodigoInvalidoException;
	public void TesteInstituicao() throws SQLException;
	public void InstalarInstituicao(boolean samples) throws SQLException;
	public void AdicionarInstituicao(Instituicao instituicao) throws SQLException,NomeInvalidoException, CnpjInvalidoException;
	public void RemoverInstituicao(Instituicao instituicao) throws SQLException,CnpjInvalidoException, InstituicaoNaoEncontradaException ;
	public ArrayList<Instituicao> ListaInstituicao() throws SQLException,ListaInstituicaoVaziaException;
	public Instituicao BuscarInstituicao(int cnpj) throws  SQLException,NomeInvalidoException,CnpjInvalidoException, InstituicaoNaoEncontradaException;
	public void EditarInstituicao(Instituicao instituicao) throws  SQLException,NomeInvalidoException,CnpjInvalidoException, InstituicaoNaoEncontradaException;

}
